280 IF ERR=53 OR ERR=71 THEN PRINT"I can't find "A$:PRINT"Please put the disk with this file in your default drive and hit <ENTER> . . .":INPUT" or enter a new drivespec";C$
283 IF LEN(C$)>0 THEN I$=MID$(C$,1,1):IF I$="c" OR I$="C" OR I$="b" OR I$="B" OR I$="a" OR I$="A" THEN A$=I$+":"+A$
287 IF ERR=53 OR ERR=71 THEN RESUME 260
288 ON ERROR GOTO 0:GOTO 470
300 ON ERROR GOTO 350
310 OPEN"bankeys.dat" FOR INPUT AS#1
320 INPUT#1,DCHAR:FOR X=1 TO 10:LINE INPUT#1,FUNC$(X):NEXT:INPUT#1,FR:CLOSE:ATT=FR:ON ERROR GOTO 0:GOTO 400
350 IF ERR=53 THEN CLOSE:OPEN"bankeys.dat" FOR OUTPUT AS#1:RESTORE:READ DCHAR:PRINT#1,DCHAR:FOR X=1 TO 10:READ FUNC$(X):PRINT#1,FUNC$(X):NEXT:READ FR:PRINT#1,FR:CLOSE:RESUME 310
360 IF ERR=71 THEN PRINT"Please get your disk drive ready to read a file ...":INPUT"Hit <ENTER> to continue . . .";A$:RESUME 310
370 GOTO 470
400 ON ERROR GOTO 450
410 J=1:OPEN"ban.ban" FOR INPUT AS#1:WHILE NOT EOF(1):LINE INPUT#1,A$(J):J=J+1:WEND:CLOSE:J=J-1
420 ON ERROR GOTO 0:GOTO 550
450 IF ERR=53 THEN CLOSE:OPEN"ban.ban" FOR OUTPUT AS#1:PRINT#1,"The ^81IBM ^01Personal Computer: ^04A tool for modern times. . .":CLOSE:RESUME 410
460 IF ERR=71 THEN PRINT"Please get your disk drive ready. ":INPUT"Press <ENTER> to continue . . .";A$:RESUME 410
470 PRINT"This program expects to find three files on the default drive. The files are :":PRINT"BANNER.USR , BANKEYS.DAT , and BANMESS.DAT. ":PRINT"If BANNER.USR is not present you are out of luck."
475 PRINT"If the .DAT files are not present the program tries to create them."
480 PRINT"This could not happen and I cannot continue.":PRINT"Check your disk and drive, or change the default drive to the one with the ":PRINT"program files and try again. ":ON ERROR GOTO 0
500 DATA 2,"^01","^02","^03","^04","^17","^47","^14","^57","^84","@END",6
1830 IF INSTR(T$,"U")THEN WROT=2:DELAY=LDLY:GOTO 1850ELSE IF INSTR(T$,"D")THEN WROT=3:DELAY=LDLY:GOTO 1850
1840 IF INSTR(T$,"R")THEN WROT=4:DELAY=BDLY ELSE WROT=1:DELAY=BDLY
1850 RETURN
1910 MAIN=-1:SHIFT=-1:WINDW=0:BANR=-1:IF BW THEN DELAY=BWDLY ELSE DELAY=BDLY
1920 RETURN
2000 ' .x play command
2005 MESS$=""
2010 M1=INSTR(DPOS+2,A$(I),CHR$(34)):IF M1 THEN M2=INSTR(M1+1,A$(I),CHR$(34)):IF M2 THEN DPOS=M2:MESS$=MID$(A$(I),M1+1,M2-M1-1) ELSE MESS$=MID$(A$(I),M1+1,255):DPOS=LEN(A$(I))-1
2400 PAUSE!=VAL(MID$(A$(I),DPOS+2,6)):IF PAUSE!<0 THEN PAUSE!=0
2410 RETURN
2450 MESSAGE=VAL(MID$(A$(I),DPOS+2,4)):IF(MESSAGE<1 OR MESSAGE>25)THEN MESSAGE=0 ELSE M1=INSTR(DPOS+2,A$(I),CHR$(34)):IF M1 THEN M2=INSTR(M1+1,A$(I),CHR$(34)):IF M2 THEN MESS$=MID$(A$(I),M1+1,M2-M1-1):GOSUB 2305
2460 RETURN
2500 NEWCHAR=VAL(MID$(A$(I),DPOS+2,4)):IF(NEWCHAR>0 AND NEWCHAR<255)THEN CHAR=NEWCHAR ELSE NEWCHAR=0
2510 RETURN
2550 NEWLINE=VAL(MID$(A$(I),DPOS+2,4)):IF(NEWLINE>9 AND NEWLINE<19)THEN START=NEWLINE-1 ELSE NEWLINE=0
2560 RETURN
2600 NEWC=INSTR(DPOS,A$(I),"^"):IF(NEWC-DPOS>4 OR NEWC=DPOS)THEN NEWC=0 ELSE C$=MID$(A$(I),NEWC,3):GOSUB 905:COLOR FG,BG
2610 RETURN
2650 SPACES=VAL(MID$(A$(I),DPOS+2,4)):IF(SPACES<1 OR SPACES>254)THEN SPACES=0 ELSE A$(0)=SPACE$(SPACES-1)+CHR$(32):GOSUB 2350
2660 RETURN
2700 NATT=INSTR(DPOS,A$(I),"^"):IF(NATT-DPOS>4 OR NATT=DPOS)THEN NATT=0 ELSE C$=MID$(A$(I),NATT+1,2):C$="&H"+C$:ATT=VAL(C$):UD=1:GOSUB 2900
3010 IF OPTA=72 THEN DOPT=DOPT-1:IF DOPT=10 THEN 3060ELSE IF DOPT<1 THEN DOPT=1 ELSE DELTA=13-DOPT:LOCATE DLINE-DELTA+1,18,0:PRINT CHR$(32);:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
3020 IF OPTA=80 THEN DOPT=DOPT+1:IF DOPT>10 THEN DOPT=11:PRINT EZ$;:LOCATE DLINE,DPOS+OPTLEN+1,1:ELSE DELTA=13-DOPT:LOCATE DLINE-DELTA-1,18,0:PRINT CHR$(32);:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
3030 IF OPTA=71 THEN IF DOPT=11 THEN DOPT=2:OPTA=72:GOTO 3010ELSE LOCATE DLINE-DELTA,18,0:PRINT CHR$(32);:DOPT=1:DELTA=13-DOPT:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
3040 IF OPTA=79 THEN IF DOPT=11 THEN DOPT=9:OPTA=80:GOTO 3020ELSE LOCATE DLINE-DELTA,18,0:PRINT CHR$(32);:DOPT=10:DELTA=13-DOPT:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0
4040 COLOR 0,FR:PRINT"COLORS in HEX for ^BF (Background|Foreground):":COLOR 10,0
4050 PRINT" 0 - BLACK - 8 | 4 - RED - C : Background color over 7 creates FLASH.":PRINT" 1 - BLUE - 9 | 5 -MAGENTA - D :":PRINT" 2 - GREEN - A | 6 - BROWN - E : FOREGROUND COLOR OVER 7 IS LIGHT VERSION"
4080 PRINT" 3 - CYAN - B | 7 - WHITE - F : of the first 0-7.";:COLOR FR,0:PRINT:RETURN
4210 COLOR 0,FR:PRINT"DOT command summary. Options during BANNER:";:COLOR 10,0:PRINT
4220 PRINT" Dot command MUST be first entry on line. Multiple commands OK on this line.":PRINT" To start a BANNER line with a period (.), use '^BF.'.":PRINT" .B = BANNER mode. Everything after this printed as a Banner. (default)"
4250 PRINT" .W = WINDOW mode. Everything after this printed in a Window.":PRINT" .WU = WINDOW Scrolls Up. OPEN .WD = Window scrolls down.":PRINT STRING$(37,205)+CHR$(206)+STRING$(41,205)
4270 PRINT" .P xxx = Pause xxx before next OPEN .M xx = print stationary Message line xx":PRINT" .D xxx = xxx is new BANNER dot OPEN .L xx = BANNER starts on Line xx (10-18)"
4290 PRINT" .C^BF = use ^BF Color on still textOPEN .S xx = Print xx Spaces on BANNER";:COLOR FR,0:PRINT:RETURN
4410 COLOR 0,FR:PRINT"COMMAND summary. To start Edit, <enter>. To get back to COMMAND= <ENTER> or @.";:COLOR 10,0:PRINT
4420 PRINT" xx,yy L = List lines xx to yy. L = List all.":PRINT" xx,yy P = Print lines xx to yy on Printer. P = Print all.":PRINT" xx,yy D = Delete lines xx to yy. D = Delete all."
4450 PRINT" xx I = Insert lines at I. I = Insert at end.":PRINT" LOAD "+CHR$(34)+"<filename>"+CHR$(34)+" , SAVE "+CHR$(34)+"<filename>"+CHR$(34)+" can be done here."
4470 PRINT" ? <func> = Print help screen. <func> is DOT, COLORS, COMMAND, or EDIT":PRINT" CLS = Clear screen.";:COLOR FR,0:PRINT:RETURN
4610 COLOR 0,FR:PRINT"EDITING summary. To get to COMMAND enter '@' or <ENTER> on a blank line.";:COLOR 10,0:PRINT
4620 PRINT" Just start typing text. Lines are added. Use full-screen editing keys.":PRINT" When lines are Listed from COMMAND mode, you can go back to EDIT and change"
4640 PRINT" them. The line number form XX > keeps track of the line you are editing.":PRINT" You can also change the line numbers or use them to enter lines.":PRINT"'Didn't get that..' while you are editing means you are really in COMMAND? mode"
4660 PRINT" Typing 'xx I> <text>' will Insert a line at line xx.":PRINT" 'xx D>' will Delete line xx.":PRINT" 'xx > <text> will Enter line xx, replacing current line xx."
4685 PRINT" (This will only allow numbers 1+ the current total lines.)":PRINT" Most anything else is added to the END of the text buffer."
4690 PRINT" COMMAND? functions can be used in the form '@<command>' with return to edit.";:COLOR FR,0:PRINT:RETURN
4810 A=INSTR(CO$,"DOT")OR INSTR(CO$,"dot"):IF A THEN GOSUB 4210:RETURN
4820 A=INSTR(CO$,"COL")OR INSTR(CO$,"col"):IF A THEN GOSUB 4040:RETURN
4830 A=INSTR(CO$,"COM")OR INSTR(CO$,"com"):IF A THEN GOSUB 4410:RETURN
4840 A=INSTR(CO$,"ED")OR INSTR(CO$,"ed"):IF A THEN GOSUB 4610:RETURN
4850 IF X THEN RETURN
4860 INPUT"Do you want help with 1) DOTs, 2) COLors, 3) COMmands, or 4) EDiting";CO$
4870 A=VAL(CO$):IF A>0 AND A<5 THEN ON A GOTO 4210,4040,4410,4610ELSE X=-1:GOTO 4810
5010 ON ERROR GOTO 5205
5020 KEY OFF:COLOR 4,0:CLS:LOCATE 10,27,1:PRINT"SAVE BANNER FUNCTION KEYS":COLOR FR:LOCATE 12,1:PRINT"This will save the current state of the function keys during editing, and the":PRINT"Foreground color and default dot character.":PRINT
5060 PRINT"Press <ENTER> to quit, or get your disk ready and answer yes to the prompt":PRINT:PRINT:GOSUB 1510:COLOR 4:PRINT"Do you want to save the present set of function keys?":I$="":WHILE I$="":I$=INKEY$:WEND
5090 IF I$="y" OR I$="Y" THEN 5110
5100 ON ERROR GOTO 0:GOTO 17010
5110 OPEN"bankeys.dat" FOR OUTPUT AS#1
5120 PRINT#1,DCHAR:FOR X=1 TO 10:PRINT#1,FUNC$(X):NEXT:PRINT#1,FR:CLOSE:PRINT"Settings SAVED.":FOR X=0 TO 1000:NEXT:GOTO 5100
5205 COLOR 4
5210 IF ERR=61 THEN PRINT"The disk is full. Try another.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
5220 IF ERR=71 THEN PRINT"The disk drive is not ready. Try again.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
5230 IF ERR=72 THEN PRINT"The disk has gone bad. Try another.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
5240 IF ERR=70 THEN PRINT"The disk is write protected. Remove the write protect tab or try another.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
5250 ON ERROR GOTO 0:END
5500 PRINT"Hit any key to continue, <Esc> key to quit . . .";
5510 GOSUB 1510:I$="":WHILE I$="":I$=INKEY$:WEND
5520 IF ASC(RIGHT$(I$,1))=27 OR I$="e" OR I$="E" THEN ENDIT=-1 ELSE ENDIT=0
5540 RETURN
6010 ON ERROR GOTO 6100
6020 RETURN
6100 IF ERR=6 THEN PRINT"The number you have input is too large (or small).":PRINT"Try a number between 32767 and -32768.":RESUME
6110 IF ERR=5 THEN FG=FR:BG=0:BEEP:RESUME NEXT
6200 ON ERROR GOTO 0
6210 RETURN
6510 T=A:FOR A=1 TO LEN(CAP$):TC$=MID$(CAP$,A,1):IF TC$>="a" AND TC$<="z" THEN MID$(CAP$,A,1)=CHR$(ASC(TC$)-32)
6520 NEXT:A=T:RETURN
7010 A=INSTR(NK$,"^"):IF A THEN C$=MID$(NK$,A,3):GOSUB 905:GOTO 7200
7020 A=INSTR(NK$,","):IF A THEN BG=VAL(MID$(NK$,A+1,4)):BG=BG AND 7 ELSE 7050
7025 IF A=1 THEN 7050
7030 IF(A>=2 AND A<=4)THEN FG=VAL(NK$)ELSE B=INSTR(A-4,NK$," "):IF B<A THEN FG=VAL(MID$(NK$,B,A-B))
7035 FG=FG AND 31:GOTO 7200
7050 CAP$=NK$:GOSUB 6510:NK$=CAP$
7100 FOR X=0 TO 15
7110 IF INSTR(NK$,DCOLOR$(X))THEN FOUND=-1:A=X:X=15 ELSE FOUND=0
7120 NEXT
7130 IF FOUND THEN IF BACK THEN BG=A ELSE FG=A
7135 IF FOUND THEN BACK=NOT BACK
7140 IF INSTR(NK$,"FLASH")THEN FLASH=NOT FLASH:IF FLASH THEN FG=FG+16:BG=BG AND 7 ELSE FG=FG AND 15:BG=BG AND 7
7150 IF INSTR(NK$,"LIGHT")THEN FG=FG OR 8
7160 IF INSTR(NK$,"DOT")THEN A=VAL(MID$(NK$,4,4)):IF A>0 AND A<255 THEN DOT=A:GOSUB 8110:DCHAR=DOT:LOCATE 4,27:COLOR FR,0:PRINT DCHAR;" = ";CHR$(DCHAR);" "
7200 A=INSTR(NK$,"KEY")OR INSTR(NK$,"key"):IF A THEN IF LEN(NK$)=3 THEN GOSUB 7500ELSE B=VAL(MID$(NK$,A+3,4)):IF(B<10 AND B>0)THEN GOSUB 810:FUNC$(B)=C$:GOSUB 7300
7310 C$=FUNC$(B):GOSUB 905:COLOR FG,BG:IF FG>15 THEN PRINT"Flashing ";
7320 PRINT CNAME$(FG AND 15);" on ";CNAME$(BG);SPACE$(47-POS(0)):RETURN
7500 LOCATE 23,47:INPUT"Which key";B$:B=VAL(B$):IF B<1 OR B>9 THEN GOSUB 7600ELSE GOSUB 810:FUNC$(B)=C$:GOSUB 7300
7510 GOSUB 1700:RETURN
7600 CAP$=B$:GOSUB 6510:B$=CAP$:FOR X=1 TO 7
7610 IF INSTR(B$,DCOLOR$(X))THEN FOUND=-1:B=X:X=7 ELSE FOUND=0
7620 NEXT:IF FOUND THEN 7650
7630 IF INSTR(B$,"BLACK")THEN B=8:FOUND=-1 ELSE IF INSTR(B$,"FLASH")THEN B=9:FOUND=-1
7650 IF FOUND THEN GOSUB 810:FUNC$(B)=C$:GOSUB 7300
7660 RETURN
8010 I$="":WHILE I$="":I$=INKEY$:WEND
8020 IF I$="y" OR I$="Y" OR I$=CHR$(13)THEN YES=-1 ELSE YES=0
8030 RETURN
8110 IF DOT=7 THEN 8190
8120 IF DOT>8 AND DOT<14 THEN 8190
8130 IF DOT>27 AND DOT<33 THEN 8190
8150 DCHAR=DOT
8190 RETURN
8210 Y1=INSTR(F$,CHR$(34)):Y2=INSTR(Y1+1,F$,CHR$(34)):IF((Y1<>0)AND(Y2<>0))THEN FS$=MID$(F$,Y1+1,Y2-Y1-1):FSQ=-1 ELSE IF(Y1<>0 AND Y1<>LEN(F$))THEN FS$=MID$(F$,Y1+1,12):FSQ=-1 ELSE FSQ=0
8220 RETURN
8510 PRINT"A filename can be up to eight letters long, with an optional three letter"
8520 PRINT"extension that must start with a period, like 'myfile' or 'myfile.ban'.":PRINT"If you don't specify an extension, *BANNER* assumes it is .BAN.":PRINT:PRINT"To list the files on a disk type a,b,c or ? followed by <ENTER> (";ENTER$;").":RETURN
9010 IF BW THEN DEF SEG=&HB000 ELSE DEF SEG=&HB800
9700 KEY OFF:CLS:COLOR FR:PRINT" Type on the screen in BIG letters!"
9710 PRINT:PRINT"Hit the ESC key when finished with this routine.":PRINT:PRINT"Available commands:":PRINT"^BF color commands. ALT+D <key> = Change dot character.":PRINT"ALT+L <key> locks keyboard until <key> is hit again."
9730 PRINT:PRINT"Use the cursor arrow keys to move around.":PRINT"Hitting the <End> key allows you to type one letter at the last screen position":PRINT" without scrolling the screen."
10020 IF INIT THEN LOCATE 4,32,1:PRINT"*BANNER*":LOCATE 6,25,0:GOTO 10030ELSE A$(0)=" *BANNER* ":I=0:EXITF=-1:GOSUB 700:LOCATE 18,25,0
10030 PRINT"(c) 1983 Martin Smith":PRINT
10035 COLOR 3,0:PRINT TAB(20)"(1) LIST the current Banner.":PRINT TAB(20)"(2) RUN the current Banner.":PRINT TAB(20)"(3) LOAD a new Banner from a file.":PRINT TAB(20)"(4) SAVE the current Banner in a file."
10080 PRINT TAB(20)"(5) EDIT the current Banner, or type a new one.":PRINT TAB(20)"(6) PRINT the current Banner on the printer.":PRINT TAB(20)"(7) CHANGE the default settings or keys.":PRINT TAB(20)"(8) TYPE in *BANNER* letters."
10120 IF DISPLAY=3 THEN PRINT TAB(20)"(9) GOTO ";:IF BW THEN PRINT"the Color Display." ELSE PRINT"Black and White Display."
10125 IF DISPLAY<>3 THEN PRINT TAB(20)"(9) GOTO (function for two displays)"
10130 PRINT TAB(20)"(10) EXIT the program, reset the Function keys.":PRINT" Use <F>unction keys, arrow keys or type a command, then press ENTER (";ENTER$;").":GOSUB 1110:PRINT:PRINT
10165 IF INIT THEN LOCATE 20,12,1 ELSE LOCATE 23,12,1
10170 COLOR FR+16,0:PRINT"Choice? ";:COLOR 7,0:INIT=-1
10210 IF LEN(I$)=2 THEN OPTA=ASC(MID$(I$,2,1)):IF OPTA=75 THEN I$=CHR$(8)ELSE GOSUB 3010:GOTO 10240
10220 IF I$=CHR$(8)THEN IF DOPT<>11 THEN PRINT EZ$:LOCATE DLINE,DPOS+OPTLEN+1,1:DOPT=11 ELSE IF OPTLEN<1 THEN OPT$="":OPTLEN=0 ELSE OPT$=LEFT$(OPT$,LEN(OPT$)-1):PRINT EZ$;:OPTLEN=OPTLEN-1
10265 DOPT=VAL(OPT$):IF DOPT>0 AND DOPT<11 THEN 10400
10270 CAP$=OPT$:GOSUB 6510:OPT$=CAP$
10285 IF CHANGE THEN 10500
10290 FOUND=0:FOR X=1 TO 10:IF INSTR(OPT$,DKEY$(X))THEN DOPT=X:FOUND=-1:X=10
10300 NEXT
10310 IF NOT FOUND THEN 10010
10320 IF INSTR(OPT$,"LOAD")THEN F$=OPT$:GOSUB 8210:IF FSQ THEN ON ERROR GOTO 13505:LOADING=-1:GOTO 13015
10330 IF INSTR(OPT$,"SAVE")THEN F$=OPT$:GOSUB 8210:IF FSQ THEN ON ERROR GOTO 13505:STORING=-1:GOTO 14030
10400 IF CHANGE THEN 10530
10410 ON DOPT GOTO 11010,12010,13000,14000,15010,16010,17010,9700,17405,20010:GOTO 10010
10500 FOUND=0:FOR X=1 TO 10:IF INSTR(OPT$,CG$(X))THEN DOPT=X:FOUND=-1:X=10
10510 NEXT
10520 IF NOT FOUND THEN 17010
10525 COLOR FR,0,0
10530 ON DOPT GOTO 17210,17310,17610,5010,18010,17510,17490,17460,17405,17960
10540 GOTO 17010
11010 COLOR FR,0,0:CLS:LS=-1:KEY OFF
11020 PRINT TAB(32)"LIST *BANNER* :":PRINT:FOR I=1 TO J:DOT=0:COLOR FR,0
11040 IF MID$(A$(I),1,1)="." THEN GOSUB 2110:DOT=-1:COLOR 0,FR ELSE GOTO 11080
11045 IF DOT THEN IF SPACES THEN PRINT"Send";SPACES;"spaces to *Banner*, ";
11050 IF DOT THEN IF PAUSE!THEN PRINT"Pause =";PAUSE!;", ";
11052 IF DOT THEN IF NATT THEN PRINT"Change Banner window to &H";HEX$(ATT);", ";
11055 IF DOT THEN IF NEWCHAR THEN PRINT"New Banner Dot=";CHAR;", ";
11057 IF DOT THEN IF NEWLINE THEN PRINT"New Banner Line=";START+1;", ";
11060 IF DOT THEN IF NEWC THEN COLOR FG,BG:PRINT"New message color= ";CNAME$(FG);" on ";CNAME$(BG);:COLOR FR
11065 IF DOT THEN IF MESSAGE THEN PRINT:PRINT"Message for line";MESSAGE;"is printed on the following line":COLOR FG,BG:PRINT MESS$;:COLOR FR,0
11070 IF DOT THEN IF WINDW THEN PRINT"Window mode ";:IF WROT=2 THEN PRINT"up, ";ELSE IF WROT=3 THEN PRINT"down, ";ELSE IF WROT=4 THEN PRINT"right, ";
11072 IF DOT THEN IF BANR THEN PRINT"Banner mode ";
11075 IF DOT THEN COLOR FR,0:PRINT:GOTO 11120
11080 FOR X=1 TO LEN(A$(I))
11090 Y=ASC(MID$(A$(I),X,1)):IF Y=94 THEN C$=MID$(A$(I),X,3):GOSUB 905:COLOR FG,BG:X=X+2 ELSE PRINT CHR$(Y);
11100 NEXT:PRINT
11120 IF(CSRLIN>16 AND I MOD 10=0)THEN GOSUB 11500:IF ENDIT THEN I=J
11125 I$=INKEY$:IF I$<>"" THEN I=J
11130 NEXT:GOSUB 1110:CHAR=DCHAR:START=9:FG=FR:BG=0:LS=0:COLOR FR+16,0:INPUT"Hit a function key or <ENTER> for menu";OPT$:DOPT=11
11230 IF OPT$="" THEN 10010
11240 GOTO 10265
11500 XCUR=CSRLIN:YCUR=POS(0):LOCATE 25,10:COLOR 0,FR:PRINT"Strike a key to continue, <Esc> key to stop.";:COLOR FR,0:I$="":WHILE I$="":I$=INKEY$:WEND:IF ASC(RIGHT$(I$,1))=27 THEN ENDIT=-1 ELSE ENDIT=0
12680 IF MID$(A$(I),1,1)="." THEN GOSUB 2110:IF PAUSE!THEN GOSUB 12510:GOTO 12695ELSE GOTO 12700
12685 IF ADDSPACE THEN A$(I)=A$(I)+" "
12690 IF SHIFT THEN SHIFT=0:GOSUB 700ELSE GOSUB 720
12695 IF EXITF=-1 THEN IF EXIT THEN LOOP=0:GOTO 12710
12700 WEND
12710 CLOSE
12720 IF LOOP THEN 12610ELSE ON ERROR GOTO 0 :RUNNING=0:LOCATE 1,1,1:INPUT"Press enter";OPT$:GOTO 10010
13000 ON ERROR GOTO 13505
13003 IF ED THEN 13015
13005 KEY OFF:LOADING=-1:CLS:LOCATE 8,29,1:COLOR FR,0:PRINT"LOAD A FILE FROM DISK":GOSUB 8510
13010 COLOR 2:PRINT:PRINT"Please type in the file name to LOAD, or <ENTER> (";ENTER$;") alone to quit."
13012 LINE INPUT">";FS$:COLOR FR
13015 IF FS$="" THEN 10010
13020 IF FS$="?" THEN FILES:GOTO 13010
13030 IF FS$="a" OR FS$="A" THEN FILES"a:*.*":GOTO 13010ELSE IF FS$="b" OR FS$="B" THEN FILES"b:*.*":GOTO 13010ELSE IF FS$="c" OR FS$="C" THEN FILES"c:*.*":GOTO 13010
13120 OPEN FS$FOR INPUT AS#1:J=1:WHILE NOT EOF(1):LINE INPUT#1,A$(J):J=J+1:WEND:CLOSE:J=J-1
13160 COLOR FR:PRINT FS$;" LOADED.":LOADING=0:IF ED THEN ON ERROR GOTO 0:ED=0:GOTO 15040
13165 ON ERROR GOTO 0
13170 GOSUB 1110
13180 COLOR FR+16,0:PRINT"Hit a function key or <Enter> alone for the Main Menu";:COLOR FR,0:INPUT OPT$
13190 DOPT=11:IF OPT$="" THEN 10010
13200 GOTO 10265
13505 COLOR 12:CLOSE:ED=0
13510 IF ERR=52 OR ERR=64 THEN PRINT FS$;" has a bad name, try again.":GOTO 13800
13520 IF ERR=68 THEN PRINT"Drive unavailable. Try another. ":GOTO 13800
13530 IF ERR=53 THEN PRINT"Can't find ";FS$;". Try another name or check directory.":GOTO 13800
13540 IF ERR=61 THEN PRINT"Disk is full! Try another.":RESUME 14020
13550 IF ERR=70 THEN PRINT"Disk write protected.":RESUME 14020
13560 IF ERR=71 THEN PRINT"Disk drive is not ready.":GOTO 13800
13570 IF ERR=72 THEN PRINT"The disk is bad. Try another.":GOTO 13800
13580 IF ERR=24 THEN PRINT"Disk time out. Better check it.":GOTO 13800
13590 IF ERR=9 THEN PRINT"Lines of file ";FS$;" have been loaded to";MAXLINES;",":PRINT"which BANNER is dimensioned for.":J=J-1:RESUME 13160
13600 IF ERR=67 THEN PRINT FS$;" either a bad filespec or disk is full.":GOTO 13800
13610 IF ERR=14 OR ERR=7 THEN PRINT"Lines of file ";FS$;" have been loaded to";J;" and then we ran out of memory. ":A$(J)="":J=J-1:RESUME 13160
13700 ON ERROR GOTO 0:END
13800 IF LOADING THEN RESUME 13010ELSE IF STORING THEN RESUME 14020
13810 GOTO 10010
14000 ON ERROR GOTO 13505
14003 IF ED THEN 14030
14005 KEY OFF:STORING=-1:COLOR FR,0:CLS:LOCATE 8,30,1:PRINT"SAVE A BANNER ON DISK":GOSUB 8510
14020 COLOR 4:PRINT:PRINT"Please enter a filename to SAVE, or <ENTER> (";ENTER$;") alone to quit."
14025 LINE INPUT">";FS$:COLOR FR
14030 IF FS$="" THEN 10010
14035 IF FS$="?" THEN FILES:GOTO 14020
14040 IF FS$="a" OR FS$="A" THEN FILES"a:*.*":GOTO 14020ELSE IF FS$="b" OR FS$="B" THEN FILES"b:*.*":GOTO 14020ELSE IF FS$="c" OR FS$="C" THEN FILES"c:*.*":GOTO 14020
14050 OPEN FS$FOR OUTPUT AS#1:FOR X=1 TO J:PRINT#1,A$(X):NEXT:CLOSE:STORING=0
14090 COLOR FR:PRINT FS$;" SAVED.":IF ED THEN ON ERROR GOTO 0:ED=0:GOTO 15040
14100 GOTO 13170
15010 COLOR FR,0:CLS:KEY OFF:GOSUB 1005
15020 PRINT"*BANNER* EDIT. Type ? for command summaries, <ENTER> to edit, END when done.":PRINT"Editing ";:COLOR FR+8:PRINT FS$:COLOR FR:PRINT"Type L to list the current *BANNER*, D to start a new *BANNER*."
15040 IF ED1 THEN 15400ELSE LINE INPUT"COMMAND? (x to exit, <enter> to edit.)";CO$:ON ERROR GOTO 15610
15045 IF LEN(CO$)>20 THEN 15040
15050 IF CO$="" OR CO$="edit" OR CO$="EDIT" THEN 15400ELSE IF CO$="end" OR CO$="END" OR CO$="x" OR CO$="X" OR CO$="@END" THEN ON ERROR GOTO 0:ED=0:ED1=0:GOTO 13170
15051 IF CO$="i" OR CO$="I" THEN INSERT=-1:E$=CHR$(32):GOTO 15400
15053 IF MID$(CO$,5,1)=">" THEN COLOR 4,0:PRINT"Can't edit text in COMMAND mode, hit <ENTER> first.":COLOR FR,0:GOTO 15040
15055 A=INSTR(CO$,"?"):IF A THEN X=0:GOSUB 4810:GOTO 15040
15057 IF CO$="k" OR CO$="K" THEN GOSUB 1005:GOTO 15040
15060 A=INSTR(CO$,"LOAD")OR INSTR(CO$,"load")
15062 IF A THEN F$=CO$:GOSUB 8210:IF FSQ THEN ED=-1:GOTO 13000ELSE ED=0:GOTO 13000
15065 A=INSTR(CO$,"cls")OR INSTR(CO$,"CLS"):IF A THEN CLS:GOSUB 1005:GOTO 15040
15070 A=INSTR(CO$,"SAVE")OR INSTR(CO$,"save")
15072 IF A THEN F$=CO$:GOSUB 8210:IF FSQ THEN ED=-1:GOTO 14000ELSE ED=0:GOTO 14000
15075 Y1=VAL(CO$):IF Y1 THEN A=INSTR(CO$,","):IF A THEN Y2=VAL(MID$(CO$,A+1,4))ELSE Y2=0
15076 IF Y2=0 THEN IF A THEN IF INSTR(A,CO$,"#")THEN Y2=J
15077 IF Y1=0 THEN Y2=0
15078 IF Y2>J THEN Y2=J
15079 IF Y1>J THEN Y1=J
15080 A=INSTR(CO$,"l")OR INSTR(CO$,"L"):IF A THEN IF Y1=0 THEN Y1=1:Y2=J:GOSUB 15305:GOTO 15040
15085 IF A THEN IF Y2>Y1 THEN GOSUB 15305:GOTO 15040ELSE IF(Y1 AND(Y2=0))THEN Y2=Y1+12:GOSUB 15305:GOTO 15040
15090 A=INSTR(CO$,"p")OR INSTR(CO$,"P"):IF A THEN IF Y1=0 THEN Y1=1:Y2=J:GOSUB 15355:GOTO 15040
15095 IF A THEN IF Y2>Y1 THEN GOSUB 15355:GOTO 15040ELSE IF(Y1 AND(Y2=0))THEN Y2=Y1+12:GOSUB 15355:GOTO 15040
15100 A=INSTR(CO$,"i")OR INSTR(CO$,"I"):IF A THEN I1=Y1-1:INSERT=-1:E$="i":GOTO 15400
15110 A=INSTR(CO$,"d")OR INSTR(CO$,"D"):IF A THEN IF Y2>Y1 THEN FOR I=Y1 TO J:A$(I)=A$(I+Y2-Y1+1):NEXT:J=J-Y2+Y1-1:GOTO 15040ELSE IF(Y1 AND(Y2=0))THEN FOR I=Y1 TO J:A$(I)=A$(I+1):NEXT:J=J-1:GOTO 15040
15120 IF A THEN IF(Y1=0 AND Y2=0)THEN COLOR FR+16,0:PRINT"Delete all?":COLOR FR,0:GOSUB 8010:IF YES THEN FOR I=1 TO J:A$(I)="":NEXT:J=0:GOTO 15040ELSE GOTO 15040
15200 PRINT"Didn't get that. Please try again or type ?":GOTO 15040
15305 IF Y2>J THEN Y2=J
15310 FOR I=Y1 TO Y2:PRINT USING" ## >&";I,A$(I)
15320 I$=INKEY$:IF I$<>"" THEN I=Y2
15330 NEXT:RETURN
15355 IF Y2>J THEN Y2=J
15360 FOR I=Y1 TO Y2:LPRINT USING" ## >&";I,A$(I)
15370 I$=INKEY$:IF I$<>"" THEN I=Y2
15380 NEXT:RETURN
15400 IF E$=CHR$(32)THEN I1=J+1 ELSE I1=I1+1
15405 IF INSERT THEN PRINT USING"###!>";I1,E$;
15410 ED1=-1:LINE INPUT T$:XCUR=CSRLIN:YCUR=POS(0):IF T$="" OR T$="@" THEN ED=0:ED1=0:INSERT=0:GOTO 15040
15415 IF MID$(T$,1,1)="@" THEN CO$=RIGHT$(T$,LEN(T$)-1):GOTO 15050
15420 IF MID$(T$,1,8)="COMMAND?" THEN ED1=0:GOTO 15040
15430 IF LEN(T$)<3 THEN T$=T$+" "
15440 Y=VAL(MID$(T$,1,4)):IF(Y=0 AND INSERT)THEN T$=STR$(I1)+" i>"+T$:Y=I1 ELSE IF(Y=0 AND INSERT=0)THEN A$(J+1)=T$:J=J+1:GOTO 15400
15450 IF Y>J+1 THEN COLOR 4:LOCATE 25,1:PRINT"Invalid line number. Stike a key, <Esc> to exit.";:COLOR FR,0:GOSUB 15900:IF ENDIT THEN ED=0:CO$="end":GOTO 15050ELSE GOTO 15040
15460 A=INSTR(T$,">"):L$=MID$(T$,1,A):IF(A>6 OR A=0)THEN Y=J+1:GOTO 15500
15470 T$=RIGHT$(T$,LEN(T$)-A)
15480 A=INSTR(L$,"d")OR INSTR(L$,"D"):IF A THEN FOR X=Y TO J-1:A$(X)=A$(X+1):NEXT:J=J-1:GOTO 15400
15490 A=INSTR(L$,"i")OR INSTR(L$,"I"):IF A THEN FOR X=J+1 TO Y+1 STEP-1:A$(X)=A$(X-1):NEXT:A$(Y)=T$:J=J+1:GOTO 15400
15500 A$(Y)=T$:IF Y=J+1 THEN J=Y
15590 GOTO 15400
15610 IF ERR=9 THEN PRINT"The BANNER Edit buffer is full. Try making individual lines longer to add text.":J=J-1:RESUME 15400
15620 IF ERR=14 THEN PRINT"No more string space is available for text. Try deleting some lines.":RESUME 15040
15630 IF ERR=27 THEN PRINT"The Printer is out of paper. Reset and try again.":RESUME 15040
15640 IF ERR=24 THEN PRINT"Device timeout":RESUME 15040
15650 IF ERR=6 THEN PRINT"Line number is to large. Try another.":RESUME 15400
15660 IF ERR=68 THEN PRINT"What printer?":RESUME 15040
15670 IF ERR=25 THEN PRINT"The printer is probably off line.":RESUME 15040
15690 ON ERROR GOTO 0
15900 I$="":WHILE I$="":I$=INKEY$:WEND:GOSUB 1510
15910 IF ASC(RIGHT$(I$,1))=27 THEN ENDIT=-1 ELSE ENDIT=0
15920 GOSUB 1005:LOCATE XCUR,YCUR:RETURN
16010 KEY OFF:COLOR FR:CLS
16020 ON ERROR GOTO 16500:LOCATE 10,19,1:PRINT"PRINT the current BANNER on the printer."
16040 PRINT:COLOR 2:PRINT" Get the printer ready and strike any key, or hit the <Esc> key to cancel . . ."
16050 I$="":WHILE I$="":I$=INKEY$:WEND
16060 IF ASC(RIGHT$(I$,1))=27 THEN 16100ELSE COLOR 1
16070 FOR X=1 TO J:PRINT A$(X):LPRINT A$(X)
16085 I$=INKEY$:IF I$<>"" THEN X=J
16090 NEXT:ON ERROR GOTO 0
16100 COLOR FR:GOTO 13165
16500 COLOR 4
16510 IF ERR=24 THEN RESUME NEXT
16520 IF ERR=27 THEN PRINT"Printer is out of paper.":RESUME 16040
16530 IF ERR=25 THEN PRINT"Printer is acting up.":RESUME 16040
17020 LOCATE 4,25,0:PRINT"*BANNER* SETTINGS MENU":LOCATE 6,25:PRINT"(c) 1983 Martin Smith":PRINT:COLOR 2:PRINT TAB(20)"(1) LETTER Character is ";CHR$(DCHAR):PRINT TAB(20)"(2) FOREGROUND Color is ";:COLOR FR:PRINT CNAME$(FR);:COLOR 2:PRINT
17060 PRINT TAB(20)"(3) KEY Settings for editing":PRINT TAB(20)"(4) SAVE Current settings.":PRINT TAB(20)"(5) HELP with *BANNER* commands.":PRINT TAB(20)"(6) SHORT help with commands."
17070 IF (DISPLAY AND 2) THEN PRINT TAB(20)"(7) LEFT Shift Color display 1 character." ELSE PRINT TAB(20)"(7) (Color display function)"
17110 IF (DISPLAY AND 2) THEN PRINT TAB(20)"(8) RIGHT Shift Color Display 1 character." ELSE PRINT TAB(20)"(8) (Color display function)"
17120 IF DISPLAY=3 THEN PRINT TAB(20)"(9) GOTO ";:IF BW THEN PRINT"the Color Display." ELSE PRINT"Black and White Display."
17125 IF DISPLAY<>3 THEN PRINT TAB(20)"(9) GOTO (function for two displays)"
17130 PRINT TAB(20)"(10) EXIT This Function.":PRINT" Use function keys, arrow keys or type a command, then press ENTER (";ENTER$;").":GOSUB 1310:GOTO 10165
17220 PRINT"Letter Character is ";DCHAR;" = "CHR$(DCHAR):LOCATE 12,10:INPUT"New value for LETTER, 1-254 or <ENTER> for no change";X
17240 IF X=0 THEN GOSUB 6200:GOTO 17010
17250 IF X<1 OR X>254 THEN PRINT"Valid characters are from 1 to 254, such as 15= ";CHR$(15);" or 219= ";CHR$(219);" or 220= ";CHR$(220);" or 206= ";CHR$(206):INPUT"Press <ENTER>";C$:GOTO 17210
17260 DOT=X:GOSUB 8110:GOTO 17210
17310 GOSUB 6010:KEY OFF:GOSUB 1410:COLOR FR,0:CLS:PRINT"This color, ";CNAME$(FR);" is the current FOREGROUND Color for BANNER."
17320 PRINT:PRINT TAB(20)"Available colors are:":PRINT:FOR X=1 TO 15:COLOR X,0:PRINT TAB(20)X;CNAME$(X):NEXT
17340 COLOR FR,0:PRINT:PRINT"Foreground can be changed with <F> keys, numbers, or a color names.":INPUT"Please type a new foreground color, <ENTER> for no change";NK$:X=VAL(NK$)
17350 IF X=0 THEN GOSUB 17385:IF X=0 THEN 17380
17360 IF X<1 OR X>15 THEN 17310
17370 FR=X
17380 GOSUB 6200:GOSUB 1510:GOTO 17010
17385 CAP$=NK$:GOSUB 6510:NK$=CAP$:FOR A=0 TO 15:IF INSTR(NK$,DCOLOR$(A))THEN X=A:A=15 ELSE X=0
17390 NEXT:IF INSTR(NK$,"LIGHT")THEN X=X+8
17395 RETURN
17405 IF DISPLAY<>3 THEN IF CHANGE THEN 17010 ELSE 10010
17407 IF BW THEN BW=0 ELSE BW=-1
17410 KEY OFF:GOSUB 65000:GOSUB 9010:IF CHANGE THEN 17010ELSE 10010
17460 IF DISPLAY<>3 THEN 17480
17465 HSYNC=HSYNC-1:IF HSYNC<80 THEN BEEP:HSYNC=86
17470 OUT 980,2:OUT 981,HSYNC
17480 COLOR FR,0,FR:GOTO 10165
17490 IF DISPLAY<>3 THEN 17480
17495 HSYNC=HSYNC+1:IF HSYNC>99 THEN BEEP:HSYNC=93
17500 GOTO 17470
17510 CLS:CO$=OPT$:X=0:GOSUB 4810:PRINT:COLOR FR+16:PRINT"Hit the space bar...":GOSUB 8010
17520 GOTO 17010:GOSUB 6010:PRINT"Present delay=";DELAY:INPUT"Enter new value (1-255). Delay above 9 loses animation in BANNER";X
17570 IF X<1 OR X>255 THEN GOTO 17590
17580 DELAY=X:GOTO 17590
17590 GOSUB 6200:GOTO 17010
17610 GOSUB 6010
17620 KEY OFF:COLOR FR:CLS:COLOR FR,0:PRINT"Change Function Keys and defaults.":PRINT:PRINT TAB(3)"Present foreground color is ";CNAME$(FR):PRINT TAB(3)"Present dot character is ";DCHAR;" = ";CHR$(DCHAR)
17650 PRINT:PRINT"Function keys during editing are:":LOCATE 7,1:A=FG:B=BG:FOR X=1 TO 10:COLOR FR,0:PRINT USING"Key #, \ \ = ";X,FUNC$(X);
17680 IF X<10 THEN C$=FUNC$(X):GOSUB 905:COLOR FG,BG:IF FG>15 THEN PRINT"Flashing ";
17690 IF X<10 THEN PRINT CNAME$(FG AND 15);" on ";CNAME$(BG);SPACE$(47-POS(0))ELSE PRINT"Stop editing key"
17700 NEXT:FG=A:BG=B:COLOR FR,0:PRINT:IF KEYS THEN 17820
17710 PRINT TAB(10)"To change these values enter <K>EY, or hit function key <F3>":PRINT TAB(23)"Press <ENTER> (";ENTER$;") alone to exit."
17730 GOSUB 1510
17740 I$="":WHILE I$="":I$=INKEY$:WEND
17750 IF I$="k" OR I$="K" THEN KEYS=-1:GOSUB 1510:GOSUB 1410:GOTO 17805
17820 COLOR FR,0:LOCATE 18,1:PRINT BLANK$:LOCATE 18,1:PRINT" Hit <ENTER> type END to quit."
17830 PRINT"Use <Fx> keys to make colors,":PRINT" or use ^bf form, or COLOR xx,yy.":PRINT"<F9> switches FLASH, <F10> makes KEY":PRINT"COLOR xx,yy KEY z will work."
17850 LOCATE 23,47:COLOR FG,BG:IF(FG AND 16)=16 THEN PRINT"Flashing ";
17860 PRINT CNAME$(FG AND 15);" on ";CNAME$(BG);:COLOR FR,0:PRINT
17870 GOSUB 1700:LOCATE 23,47:PRINT"Color for ";:IF BACK THEN COLOR 0,FR:PRINT"BACKGROUND or ?";:COLOR FR,0:PRINT ELSE PRINT"FOREGROUND or ?"
17880 GOSUB 1700:LOCATE 23,47:LINE INPUT"==>";NK$:IF NK$="" OR NK$="end" OR NK$="END" OR NK$="e" OR NK$="E" THEN 17770
18020 COLOR FR+8,0:CLS:PRINT TAB(23)"*BANNER* Help section.":COLOR FR
18100 OPEN T$FOR INPUT AS#1:WHILE NOT EOF(1):LINE INPUT#1,A$
18140 IF A$=CHR$(126)THEN LOCATE 25,1:GOSUB 5500:LOCATE 25,1:PRINT SPACE$(79);:IF ENDIT THEN CLOSE:GOTO 18220ELSE CLS:GOTO 18160
18150 PRINT A$
18160 WEND
18200 CLOSE:PRINT:GOSUB 5500
18220 ON ERROR GOTO 0:GOTO 17010
18500 CLOSE
18510 IF ERR=53 THEN INPUT"I can't find the help file. Enter a new drive";A$
18520 IF ERR=53 THEN IF A$="" THEN RESUME 18220ELSE IF MID$(A$,2,1)=":" THEN T$=MID$(A$,1,2)+T$:RESUME 18020
18530 IF ERR=53 THEN IF A$="a" OR A$="A" THEN T$="a:banhelp.txt":RESUME 18020ELSE IF A$="b" OR A$="B" THEN T$="b:banhelp.txt":RESUME 18020ELSE IF A$="c" OR A$="C" THEN T$="c:banhelp.txt":RESUME 18020
18540 IF ERR=71 THEN INPUT"Disk is not ready. Press <ENTER> and we will try again.":RESUME 18020
18600 ON ERROR GOTO 0:PRINT"function":RETURN
20010 GOSUB 1205
20020 CLOSE:DEF SEG:POKE 106,0:PRINT"(C) 1983 Martin Smith.":PRINT"Hit Function Key <F8> to continue. . .":END:END